home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Collections: Franz PD
/
Franz PD Disk #318 (1994-03)(Rhein-Sieg-Soft).zip
/
Franz PD Disk #318 (1994-03)(Rhein-Sieg-Soft).adf
/
Kopfrechnen
/
KOPFRECHNEN.LST
< prev
next >
Wrap
File List
|
1991-08-22
|
12KB
|
556 lines
OPENS 1,0,0,640,256,2,&H8000
OPENW #1,0,0,640,254,0,4098
TITLEW #1," Kopfrechnen üben - programmiert in GFABASIC von Werner Ammann April 1991 "
task=FindTask(0) ! Task finden
oldpoint=LPEEK(task+184) ! Alte Requesteradresse
adr%=WINDOW(1) ! Fensteradresse
LPOKE task+184,adr% ! Fensteradresse in Requesteradr POKEn
DIM hs$(12),hs%(12),gr$(12)
@init
> PROCEDURE init
IF NOT EXIST("rechnen.hiscore") THEN
OPEN "O",#1,"rechnen.hiscore"
FOR p%=1 TO 12
PRINT #1,"Amiga"
PRINT #1,"10"
PRINT #1,"bis 10000"
NEXT p%
CLOSE #1
ELSE
GOSUB showhiscore
ENDIF
WHILE wahl<>7 ! Programmende nicht gewählt !
CLS
WHILE MOUSEK=1
WEND
PRINT AT(4,6);"Trainiere Dein Rechnen !"
PRINT AT(4,14);"Wähle bitte mit der Maus"
PRINT AT(4,16);" die gewünschte"
PRINT AT(4,18);"Schwierigkeitsstufe aus!"
GOSUB gadget(35,4,"Rechnen mit Zahlen bis 20 ")
GOSUB gadget(35,7,"Rechnen mit Zahlen bis 50 ")
GOSUB gadget(35,10,"Rechnen mit Zahlen bis 100 ")
GOSUB gadget(35,13,"Rechnen mit Zahlen bis 500 ")
GOSUB gadget(35,16,"Rechnen mit Zahlen bis 1000 ")
GOSUB gadget(35,19,"Rechnen mit Zahlen bis 10000")
GOSUB gadget(35,23," - - Programm beenden - - ")
WHILE wahl=0
REPEAT
UNTIL MOUSEK=1
IF MOUSEX>260 AND MOUSEX<500 AND MOUSEY>23 AND MOUSEY<37 THEN
wahl=1
ELSE IF MOUSEX>260 AND MOUSEX<500 AND MOUSEY>47 AND MOUSEY<61
wahl=2
ELSE IF MOUSEX>260 AND MOUSEX<500 AND MOUSEY>71 AND MOUSEY<85
wahl=3
ELSE IF MOUSEX>260 AND MOUSEX<500 AND MOUSEY>95 AND MOUSEY<109
wahl=4
ELSE IF MOUSEX>260 AND MOUSEX<500 AND MOUSEY>119 AND MOUSEY<133
wahl=5
ELSE IF MOUSEX>260 AND MOUSEX<500 AND MOUSEY>143 AND MOUSEY<157
wahl=6
ELSE IF MOUSEX>260 AND MOUSEX<500 AND MOUSEY>175 AND MOUSEY<189
wahl=7
ENDIF
WEND
CLS
ON wahl GOSUB stufe1,stufe2,stufe3,stufe4,stufe5,stufe6,ende
wahl=0
WEND
RETURN
> PROCEDURE stufe1
TITLEW #1," Kopfrechnen üben mit Zahlen bis 20 "
GOSUB auswahl
max=20
GOSUB rechnen
TITLEW #1," Kopfrechnen üben - programmiert in GFABASIC von Werner Ammann April 1991 "
rwahl=0
RETURN
> PROCEDURE stufe2
TITLEW #1," Kopfrechnen üben mit Zahlen bis 50 "
GOSUB auswahl
max=50
GOSUB rechnen
TITLEW #1," Kopfrechnen üben - programmiert in GFABASIC von Werner Ammann April 1991 "
rwahl=0
RETURN
> PROCEDURE stufe3
TITLEW #1," Kopfrechnen üben mit Zahlen bis 100 "
GOSUB auswahl
max=100
GOSUB rechnen
TITLEW #1," Kopfrechnen üben - programmiert in GFABASIC von Werner Ammann April 1991 "
rwahl=0
RETURN
> PROCEDURE stufe4
TITLEW #1," Kopfrechnen üben mit Zahlen bis 500 "
GOSUB auswahl
max=500
GOSUB rechnen
TITLEW #1," Kopfrechnen üben - programmiert in GFABASIC von Werner Ammann April 1991 "
rwahl=0
RETURN
> PROCEDURE stufe5
TITLEW #1," Kopfrechnen üben mit Zahlen bis 1000 "
GOSUB auswahl
max=1000
GOSUB rechnen
TITLEW #1," Kopfrechnen üben - programmiert in GFABASIC von Werner Ammann April 1991 "
rwahl=0
RETURN
> PROCEDURE stufe6
TITLEW #1," Kopfrechnen üben mit Zahlen bis 10000 "
GOSUB auswahl
max=10000
GOSUB rechnen
TITLEW #1," Kopfrechnen üben - programmiert in GFABASIC von Werner Ammann April 1991 "
rwahl=0
RETURN
> PROCEDURE rechnen
CLS
REPEAT
UNTIL INKEY$=""
richtig=0
falsch=0
zeit=TIMER
FOR p=1 TO 10
IF rwahl=1 THEN ! add
z1=0
z2=0
WHILE z1+z2<1 OR z1+z2>max
z1=RANDOM(max)+1
z2=RANDOM(max)+1
WEND
PCOLOR 1,0
PRINT AT(2,p*2);" Wieviel gibt ";z1;" + ";z2;" ? ";
FORM INPUT 7,ein$
ein=VAL(ein$)
IF ein=z1+z2 THEN
INC richtig
PCOLOR 2,1
PRINT AT(37,p*2);"RICHTIG"
ELSE
INC falsch
PCOLOR 3,0
PRINT AT(37,p*2);"FALSCH, richtig wäre ";z1+z2
ENDIF
ENDIF
IF rwahl=2 THEN ! sub
z1=RANDOM(max)+1
z2=0
WHILE z2<1 OR z2>z1
z2=RANDOM(max)+1
WEND
PCOLOR 1,0
PRINT AT(2,p*2);" Wieviel gibt ";z1;" - ";z2;" ? ";
FORM INPUT 7,ein$
ein=VAL(ein$)
IF ein=z1-z2 THEN
INC richtig
PCOLOR 2,1
PRINT AT(37,p*2);"RICHTIG"
ELSE
INC falsch
PCOLOR 3,0
PRINT AT(37,p*2);"FALSCH, richtig wäre ";z1-z2
ENDIF
ENDIF
IF rwahl=3 THEN ! add und sub
z=RANDOM(2)
IF z=1 THEN
z1=0
z2=0
WHILE z1+z2<1 OR z1+z2>max
z1=RANDOM(max)+1
z2=RANDOM(max)+1
WEND
PCOLOR 1,0
PRINT AT(2,p*2);" Wieviel gibt ";z1;" + ";z2;" ? ";
FORM INPUT 7,ein$
ein=VAL(ein$)
IF ein=z1+z2 THEN
INC richtig
PCOLOR 2,1
PRINT AT(37,p*2);"RICHTIG"
ELSE
INC falsch
PCOLOR 3,0
PRINT AT(37,p*2);"FALSCH, richtig wäre ";z1+z2
ENDIF
ELSE
z1=RANDOM(max)+1
z2=0
WHILE z2<1 OR z2>z1
z2=RANDOM(max)+1
WEND
PCOLOR 1,0
PRINT AT(2,p*2);" Wieviel gibt ";z1;" - ";z2;" ? ";
FORM INPUT 7,ein$
ein=VAL(ein$)
IF ein=z1-z2 THEN
INC richtig
PCOLOR 2,1
PRINT AT(37,p*2);"RICHTIG"
ELSE
INC falsch
PCOLOR 3,0
PRINT AT(37,p*2);"FALSCH, richtig wäre ";z1-z2
ENDIF
ENDIF
ENDIF
IF rwahl=4 THEN ! mul
z1=0
z2=0
WHILE z1*z2>max OR z1*z2<1
z1=RANDOM(max-1)+2
z2=RANDOM(max-1)+2
WEND
PCOLOR 1,0
PRINT AT(2,p*2);" Wieviel gibt ";z1;" * ";z2;" ? ";
FORM INPUT 7,ein$
ein=VAL(ein$)
IF ein=z1*z2 THEN
INC richtig
PCOLOR 2,1
PRINT AT(37,p*2);"RICHTIG"
ELSE
INC falsch
PCOLOR 3,0
PRINT AT(37,p*2);"FALSCH, richtig wäre ";z1*z2
ENDIF
ENDIF
IF rwahl=5 THEN ! div
z1=3
z2=4
WHILE MOD(z1,z2)<>0 OR (z1=z2)
z1=RANDOM(max)+1
z2=RANDOM(max-1)+2
WEND
PCOLOR 1,0
PRINT AT(2,p*2);" Wieviel gibt ";z1;" : ";z2;" ? ";
FORM INPUT 7,ein$
ein=VAL(ein$)
IF ein=z1/z2 THEN
INC richtig
PCOLOR 2,1
PRINT AT(37,p*2);"RICHTIG"
ELSE
INC falsch
PCOLOR 3,0
PRINT AT(37,p*2);"FALSCH, richtig wäre ";z1/z2
ENDIF
ENDIF
IF rwahl=6 THEN ! mul und div
z=RANDOM(2)
IF z=1 THEN
z1=0
z2=0
WHILE z1*z2>max OR z1*z2<1
z1=RANDOM(max-1)+2
z2=RANDOM(max-1)+2
WEND
PCOLOR 1,0
PRINT AT(2,p*2);" Wieviel gibt ";z1;" * ";z2;" ? ";
FORM INPUT 7,ein$
ein=VAL(ein$)
IF ein=z1*z2 THEN
INC richtig
PCOLOR 2,1
PRINT AT(37,p*2);"RICHTIG"
ELSE
INC falsch
PCOLOR 3,0
PRINT AT(37,p*2);"FALSCH, richtig wäre ";z1*z2
ENDIF
ELSE
z1=3
z2=4
WHILE MOD(z1,z2)<>0 OR (z1=z2)
z1=RANDOM(max)+1
z2=RANDOM(max-1)+2
WEND
PCOLOR 1,0
PRINT AT(2,p*2);" Wieviel gibt ";z1;" : ";z2;" ? ";
FORM INPUT 7,ein$
ein=VAL(ein$)
IF ein=z1/z2 THEN
INC richtig
PCOLOR 2,1
PRINT AT(37,p*2);"RICHTIG"
ELSE
INC falsch
PCOLOR 3,0
PRINT AT(37,p*2);"FALSCH, richtig wäre ";z1/z2
ENDIF
ENDIF
ENDIF
IF rwahl=7 THEN ! alle vier
z=RANDOM(4)+1
IF z=1 THEN
z1=0
z2=0
WHILE z1+z2<1 OR z1+z2>max
z1=RANDOM(max)+1
z2=RANDOM(max)+1
WEND
PCOLOR 1,0
PRINT AT(2,p*2);" Wieviel gibt ";z1;" + ";z2;" ? ";
FORM INPUT 7,ein$
ein=VAL(ein$)
IF ein=z1+z2 THEN
INC richtig
PCOLOR 2,1
PRINT AT(37,p*2);"RICHTIG"
ELSE
INC falsch
PCOLOR 3,0
PRINT AT(37,p*2);"FALSCH, richtig wäre ";z1+z2
ENDIF
ELSE IF z=2
z1=RANDOM(max)+1
z2=0
WHILE z2<1 OR z2>z1
z2=RANDOM(max)+1
WEND
PCOLOR 1,0
PRINT AT(2,p*2);" Wieviel gibt ";z1;" - ";z2;" ? ";
FORM INPUT 7,ein$
ein=VAL(ein$)
IF ein=z1-z2 THEN
INC richtig
PCOLOR 2,1
PRINT AT(37,p*2);"RICHTIG"
ELSE
INC falsch
PCOLOR 3,0
PRINT AT(37,p*2);"FALSCH, richtig wäre ";z1-z2
ENDIF
ELSE IF z=3
z1=0
z2=0
WHILE z1*z2>max OR z1*z2<1
z1=RANDOM(max-1)+2
z2=RANDOM(max-1)+2
WEND
PCOLOR 1,0
PRINT AT(2,p*2);" Wieviel gibt ";z1;" * ";z2;" ? ";
FORM INPUT 7,ein$
ein=VAL(ein$)
IF ein=z1*z2 THEN
INC richtig
PCOLOR 2,1
PRINT AT(37,p*2);"RICHTIG"
ELSE
INC falsch
PCOLOR 3,0
PRINT AT(37,p*2);"FALSCH, richtig wäre ";z1*z2
ENDIF
ELSE IF z=4
z1=3
z2=4
WHILE MOD(z1,z2)<>0 OR (z1=z2)
z1=RANDOM(max)+1
z2=RANDOM(max-1)+2
WEND
PCOLOR 1,0
PRINT AT(2,p*2);" Wieviel gibt ";z1;" : ";z2;" ? ";
FORM INPUT 7,ein$
ein=VAL(ein$)
IF ein=z1/z2 THEN
INC richtig
PCOLOR 2,1
PRINT AT(37,p*2);"RICHTIG"
ELSE
INC falsch
PCOLOR 3,0
PRINT AT(37,p*2);"FALSCH, richtig wäre ";z1/z2
ENDIF
ENDIF
ENDIF
NEXT p
rechenzeit%=(TIMER-zeit)/200
PRINT
PRINT
PCOLOR 1,0
PRINT " Von 10 Aufgaben sind ";richtig;" richtig gelöst worden in ";rechenzeit%;" Sekunden."
GOSUB wertung
PRINT
PRINT " Maustaste !"
REPEAT
UNTIL MOUSEK
CLS
RETURN
> PROCEDURE auswahl
WHILE MOUSEK=1
WEND
GOSUB gadget(5,4,"Nur Addieren + ")
GOSUB gadget(5,7,"Nur Subtrahieren - ")
GOSUB gadget(5,10,"Addieren und subtrahieren ")
GOSUB gadget(5,13,"Nur Multiplizieren * ")
GOSUB gadget(5,16,"Nur Dividieren : ")
GOSUB gadget(5,19,"Multiplizieren und Dividieren")
GOSUB gadget(5,22,"Alle vier Arten gemischt ")
WHILE rwahl=0
REPEAT
UNTIL MOUSEK=1
IF MOUSEX>20 AND MOUSEX<530 AND MOUSEY>23 AND MOUSEY<37 THEN
rwahl=1
ELSE IF MOUSEX>20 AND MOUSEX<270 AND MOUSEY>47 AND MOUSEY<61
rwahl=2
ELSE IF MOUSEX>20 AND MOUSEX<270 AND MOUSEY>71 AND MOUSEY<85
rwahl=3
ELSE IF MOUSEX>20 AND MOUSEX<270 AND MOUSEY>95 AND MOUSEY<109
rwahl=4
ELSE IF MOUSEX>20 AND MOUSEX<270 AND MOUSEY>119 AND MOUSEY<133
rwahl=5
ELSE IF MOUSEX>20 AND MOUSEX<270 AND MOUSEY>143 AND MOUSEY<157
rwahl=6
ELSE IF MOUSEX>20 AND MOUSEX<270 AND MOUSEY>167 AND MOUSEY<181
rwahl=7
ENDIF
WEND
RETURN
> PROCEDURE wertung
PRINT
IF richtig=10 THEN
w1$=" Sehr gut gelöst, "
ELSE IF richtig=9 OR richtig=8
w1$=" Recht gut gemacht, "
ELSE IF richtig=7 OR richtig=6
w1$=" Mittelmässige Leistung, "
ELSE IF richtig=5 OR richtig=4
w1$=" Etwas schwach, "
ELSE
w1$=" Sehr schwach, "
ENDIF
IF richtig>5 AND rechenzeit%<121*wahl THEN
w2$="und"
ELSE IF richtig>5 AND rechenzeit%>120*wahl
w2$="aber"
ELSE IF richtig<6 AND rechenzeit%<121*wahl
w2$="aber"
ELSE
w2$="und"
ENDIF
wahl=wahl/2
IF rechenzeit%<31*wahl THEN
w3$=" sehr schnell !"
ELSE IF rechenzeit%>30*wahl AND rechenzeit%<61*wahl
w3$=" recht schnell !"
ELSE IF rechenzeit%>60*wahl AND rechenzeit%<121*wahl
w3$=" etwa in normaler Zeit !"
ELSE IF rechenzeit%>120*wahl AND rechenzeit%<240*wahl
w3$=" etwas langsam !"
ELSE
w3$=" hast Du geschlafen ?"
ENDIF
PRINT w1$;w2$;w3$
PRINT
pkt%=richtig*(300-rechenzeit%)*(wahl/1.5)
wahl=wahl*2
IF pkt%>hs%(12) THEN
GOSUB hiscoreeintrag
ELSE
IF pkt%<2 THEN
PRINT " Das ergibt insgesamt ja weniger als null Punkte, streng Dich bitte etwas an !"
ELSE
PRINT " Das ergibt nun insgesamt ";pkt%;" Punkte !"
ENDIF
ENDIF
RETURN
> PROCEDURE ende
REPEAT
UNTIL MOUSEK
LPOKE task+184,oldpoint ! Urzustand wiederherstellen
CLOSEW #1
CLOSES 1
EDIT
RETURN
> PROCEDURE gadget(gx%,gy%,text$)
IF gx%<3 THEN
gx%=3
ENDIF
IF gy%<3 THEN
gy%=3
ENDIF
l%=LEN(text$)
DEC gx%
DEC gy%
PCOLOR 1,0
PRINT AT(gx%,gy%);text$
COLOR 3,0
BOX gx%*8-12,gy%*8-1,(gx%+l%)*8+4,gy%*8+13
BOX gx%*8-11,gy%*8-1,(gx%+l%)*8+3,gy%*8+13
LINE gx%*8-10,gy%*8+14,(gx%+l%)*8+5,gy%*8+14
LINE gx%*8-8,gy%*8+15,(gx%+l%)*8+7,gy%*8+15
LINE (gx%+l%)*8+5,gy%*8,(gx%+l%)*8+5,gy%*8+13
LINE (gx%+l%)*8+6,gy%*8,(gx%+l%)*8+6,gy%*8+14
LINE (gx%+l%)*8+7,gy%*8+1,(gx%+l%)*8+7,gy%*8+14
LINE (gx%+l%)*8+8,gy%*8+1,(gx%+l%)*8+8,gy%*8+15
RETURN
> PROCEDURE showhiscore
CLS
PCOLOR 2,0
PRINT AT(18,2);"DIE 12 BESTEN KOPFRECHNER :"
PRINT
PCOLOR 1,0
OPEN "I",#1,"rechnen.hiscore"
FOR p%=1 TO 12
INPUT #1,hs$(p%)
INPUT #1,hs%(p%)
INPUT #1,gr$(p%)
PRINT USING " ##",p%;
z$=SPACE$(20)
LSET z$=hs$(p%)
PRINT ". ";z$;" ";
PRINT USING "####",hs%(p%);
PRINT " Punkte Zahlengruppe ";gr$(p%)
PRINT
NEXT p%
CLOSE #1
PAUSE 12
PRINT
PCOLOR 2,0
PRINT " Bitte Maustaste drücken !"
REPEAT
UNTIL MOUSEK
PCOLOR 1,0
CLS
RETURN
> PROCEDURE hiscoreeintrag
PRINT " ";pkt%;" Punkte. Neuer Hi-Score ! ";
INPUT "Dein Name ";n$
IF wahl=1 THEN
gr$="bis 20"
ELSE IF wahl=2
gr$="bis 50"
ELSE IF wahl=3
gr$="bis 100"
ELSE IF wahl=4
gr$="bis 500"
ELSE IF wahl=5
gr$="bis 1000"
ELSE IF wahl=6
gr$="bis 10000"
ENDIF
FOR p%=1 TO 12
IF hs%(p%)=<pkt% THEN
INSERT hs$(p%)=n$
INSERT hs%(p%)=pkt%
INSERT gr$(p%)=gr$
p%=12
ENDIF
NEXT p%
GOSUB savehiscore
GOSUB showhiscore
RETURN
> PROCEDURE savehiscore
OPEN "O",#1,"rechnen.hiscore"
FOR p%=1 TO 12
PRINT #1,hs$(p%)
PRINT #1,hs%(p%)
PRINT #1,gr$(p%)
NEXT p%
CLOSE #1
RETURN